home *** CD-ROM | disk | FTP | other *** search
/ Aminet 41 / Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso / Aminet / gfx / edit / AmiCAD_2.07.lha / AmiCAD / ARexx / Karnaugh.AmiCAD < prev    next >
Text File  |  2000-11-12  |  4KB  |  151 lines

  1. /* Création d'un tableau de Karnaugh
  2.    Create a table of Karnaugh
  3.    Version 1.00, 5 Avril 1998, © R.Florac
  4.    Version 1.01, 10 novembre 2000 (localisation anglais/français, ajout SAVEALL)
  5.    $VER: Karnaugh.AmiCAD 1.01 (© R.Florac, 10/11/2000)
  6. */
  7.  
  8. options results     /* indispensable pour récupérer le résultat des macros */
  9.  
  10. signal on error     /* pour l'interception des erreurs */
  11. signal on syntax
  12.  
  13. 'LANGUAGE'
  14. if result="français.language" then fr=1
  15. else fr=0
  16.  
  17. if fr=1 then do
  18.     'ASKNUM("Nombre d''entrées",3)'
  19.     nbe=result
  20.     if nbe="" then exit
  21.  
  22.     do i=1 to nbe
  23.     'ASKTEXT("Nom de l''entrée 'i'","E")'; nomE.i=result
  24.     end
  25.  
  26.     'ASKTEXT("Nom de la sortie","Q")'; nomS=result
  27. end
  28. else do
  29.     'ASKNUM("Number of inputs",3)'
  30.     nbe=result
  31.     if nbe="" then exit
  32.  
  33.     do i=1 to nbe
  34.     'ASKTEXT("Name of input 'i'","E")'; nomE.i=result
  35.     end
  36.  
  37.     'ASKTEXT("Name of output","Q")'; nomS=result
  38. end
  39.  
  40. 'SETSCALE(0,100,100):ROTATE(0,0):SYMMETRY(0,0):DRAWMODE(1):SAVEALL'
  41.  
  42. nbcases=2**nbe        /* nombre de cases */
  43. nblignes=nbe%2        /* nombre de lignes */
  44. nbcol=nbe-nblignes  /* nombre d'entrées situées en haut (horizontal) */
  45.  
  46. /* Tracé des lignes verticales */
  47. c=(nbe-nbcol)*10+20
  48. l0=10+nbcol*15
  49. l1=l0+(2**nblignes)*30
  50. do col=1 to (2**nbcol)+1
  51.     select
  52.     when col=1 then 'DRAWMODE(2)'
  53.     when col=(2**nbcol)+1 then 'DRAWMODE(2)'
  54.     otherwise 'DRAWMODE(1)'
  55.     end
  56.     'MARK(DRAW('c+col*30','l0','c+col*30','l1'))'
  57.     col.col=c+col*30
  58. end
  59.  
  60. /* Tracé des lignes horizontales */
  61. c0=(nbe-nbcol)*10+50
  62. c1=c0+((2**nbcol))*30
  63. do i=1 to (2**nblignes)+1
  64.     select
  65.     when i=1 then 'DRAWMODE(2)'
  66.     when i=(2**nblignes)+1 then 'DRAWMODE(2)'
  67.     otherwise 'DRAWMODE(1)'
  68.     end
  69.     'MARK(DRAW('c0','l0','c1','l0'))'
  70.     ligne.i=l0
  71.     l0=l0+30
  72. end
  73.  
  74. /* Tracé des valeurs d'entrées (horizontales) */
  75. nbval=(2**nbcol)/2
  76. l0=10+nbcol*15
  77. pas=1
  78. do c=1 to nbcol
  79.     if c=nbcol then do
  80.     p=nbval+1
  81.     d=p+nbval
  82.     'MARK(DRAW('col.p','l0-c*10','col.d','l0-c*10'))'
  83.     end
  84.     else do
  85.     p=pas+1
  86.     do while p<=nbval*2
  87.         r=p+pas*2
  88.         'MARK(DRAW('col.p','l0-c*10','col.r','l0-c*10'))'
  89.         p=r+pas*2
  90.     end
  91.     pas=pas*2
  92.     end
  93. end
  94.  
  95. /* Tracé des valeurs d'entrées (verticales) */
  96. nbval=(2**nblignes)/2
  97. pas=1
  98. do l=1 to nblignes
  99.     if l=nblignes then do
  100.     p=nbval+1
  101.     d=p+nbval
  102.     'MARK(DRAW('col.1-10*l','ligne.p','col.1-10*l','ligne.d'))'
  103.     end
  104.     else do
  105.     p=pas+1
  106.     do while p<=nbval*2
  107.         r=p+pas*2
  108.         'MARK(DRAW('col.1-10*l','ligne.p','col.1-10*l','ligne.r'))'
  109.         p=r+pas*2
  110.     end
  111.     pas=pas*2
  112.     end
  113. end
  114.  
  115. /* Écriture des repères verticaux */
  116. 'ROTATE(0,3):DRAWMODE(1)'
  117. do i=1 to nblignes
  118.     if nomE.i="" then nomE.i='?'
  119.     'MARK(WRITE("'nomE.i'",'col.1-10*i+3','ligne.d+10'+TXHEIGHT("'nomE.i'")))'
  120.     c=c+15
  121. end
  122.  
  123. /* Écriture des repères horizontaux */
  124. 'ROTATE(0,0)'
  125. d=(2**nbcol)+1
  126. do while i<=nbe
  127.     if nomE.i="" then nomE.i='?'
  128.     'MARK(WRITE("'nomE.i'",'col.d+5','ligne.1+4-10*(i-nblignes)'))'
  129.     i=i+1
  130. end
  131.  
  132. /* Écriture du nom de la sortie */
  133. if nomS="" then nomS="?"
  134. d=d%2+1
  135. p=(2**nblignes)+1
  136. 'MARK(WRITE("'nomS'",'col.d'-TXWIDTH("'nomS'")/2,'ligne.p+15'))'
  137.  
  138. exit
  139.  
  140. /* Traitement des erreurs, interruption du programme */
  141. syntax:
  142. erreur=RC
  143. if fr=1 then 'MESSAGE("Script Karnaugh.AmiCAD"+CHR(10)+"Erreur de syntaxe"+CHR(10)+"en ligne 'SIGL'"+CHR(10)+"'errortext(erreur)'")'
  144. else 'MESSAGE("Karnaugh.AmiCAD script"+CHR(10)+"Syntax error"+CHR(10)+"in line 'SIGL'"+CHR(10)+"'errortext(erreur)'")'
  145. exit
  146.  
  147. error:
  148. if fr=1 then 'MESSAGE("Script Karnaugh"+CHR(10)+"Erreur en ligne 'SIGL'")'
  149. else 'MESSAGE("Karnaugh.AmiCAD script"+CHR(10)+"Error in line 'SIGL'")'
  150. exit
  151.